bkmrq 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 74e53ea64f34ff615830f694cb0ee20c81bdff858f231675a427bf10e17edb47
4
+ data.tar.gz: f0e3fe29ddd97c9a4623c924112dc26c10d2513179fad931b2c88398206f52e5
5
+ SHA512:
6
+ metadata.gz: 51a26495b2828cd4a578ed3053644c722485f07231dd6fafef99f0b3055b7907c579e911e2ea101ecd7116cd986c8857e606c784156419448deaf212b584f741
7
+ data.tar.gz: 69f84df5c8c0e32e227e51cbe0e03fa5f869ec8c49994535006af0a1b9a388593a9e523c60b735a5058c7f17ebf170fbec14031d556a280a876fb97358d37d28
data/bin/bkmrq ADDED
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ SELFDIR=$(dirname "$0")
5
+ ruby "${SELFDIR}/../lib/app.rb" "$*"
data/lib/app.rb ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'cli'
4
+
5
+ Bkmrq::Cli.new(ARGV)
data/lib/bkmrq.rb ADDED
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require_relative 'docs_template'
5
+ require_relative 'browser_config'
6
+
7
+ module Bkmrq
8
+ # Bookmarks Document Generator
9
+ class App
10
+ BLOCKLIST = ENV.fetch('BKMRQ_BLOCKLIST', '(pdf|google|file:)').split(',').map(&:strip)
11
+
12
+ def initialize(browser: :brave, bookmarks_input: nil)
13
+ @bookmarks_input = bookmarks_input || Bkmrq::BROWSER_CONFIG.dig(browser, :bookmark_file_path)
14
+ end
15
+
16
+ def export!
17
+ write_template
18
+ export(bookmarks['bookmark_bar'])
19
+ export(bookmarks['other'])
20
+ export(bookmarks['synced'])
21
+ output_file.close
22
+ end
23
+
24
+ private
25
+
26
+ def output_file
27
+ @output_file ||= ::File.open(
28
+ "bkmrq_export_#{String(Integer(Time.now))[0..-2]}.md",
29
+ 'w+'
30
+ )
31
+ end
32
+
33
+ def bookmarks
34
+ @bookmarks ||= ::File.open(@bookmarks_input, 'r') do |file|
35
+ JSON.parse(file.read)['roots']
36
+ end
37
+ end
38
+
39
+ def write_template
40
+ %i[title subtitle header_image description]
41
+ .map(&Bkmrq::DocsTemplate.method(:public_send))
42
+ .map(&output_file.method(:write))
43
+ end
44
+
45
+ def export(marqs = bookmarks, level = 1)
46
+ return if skip_export?(marqs)
47
+
48
+ output_file.write(generate_formatted_entity(marqs, level))
49
+ marqs.fetch('children', []).empty? ||
50
+ marqs['children'].map { |child| export(child, level + 1) }
51
+ end
52
+
53
+ def skip_export?(bookmark_section)
54
+ [bookmark_section['name'], bookmark_section['name']].any? do |meta|
55
+ BLOCKLIST.any? { |pattern| !meta&.match(pattern).nil? }
56
+ end
57
+ end
58
+
59
+ def generate_formatted_entity(bookmark, level)
60
+ if bookmark['url'].nil?
61
+ generate_bookmark_title(bookmark, level)
62
+ else
63
+ generate_bookmark_link(bookmark, level)
64
+ end
65
+ end
66
+
67
+ def generate_bookmark_title(bookmark, level)
68
+ [
69
+ ' ' * level,
70
+ '#' * level,
71
+ "#{bookmark['name']}\n"
72
+ ].join(' ')
73
+ end
74
+
75
+ def generate_bookmark_link(bookmark, level)
76
+ [
77
+ ' ' * level,
78
+ "[#{bookmark['name']}](#{bookmark['url']}) \n"
79
+ ].join(' ')
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Bkmrq
4
+ module Bkmrq
5
+ USER_HOME = ENV.fetch('HOME', ::File.join('home', ENV['USER']))
6
+
7
+ BRAVE_BROWSER_CONFIG = {
8
+ bookmark_file_path: File.join(
9
+ USER_HOME, '.config', 'BraveSoftware', 'Brave-Browser', 'Default', 'Bookmarks'
10
+ ),
11
+ root: 'roots'
12
+ }.freeze
13
+
14
+ CHROME_BROWSER_CONFIG = {
15
+ bookmark_file_path: File.join(USER_HOME, '.config', 'chromium', 'Default', 'Bookmarks'),
16
+ root: 'roots'
17
+ }.freeze
18
+
19
+ BROWSER_CONFIG = {
20
+ brave: BRAVE_BROWSER_CONFIG,
21
+ chrome: CHROME_BROWSER_CONFIG
22
+ }.freeze
23
+ end
data/lib/cli.rb ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'optparse'
6
+ require 'pry'
7
+
8
+ require_relative 'bkmrq'
9
+ require_relative 'manual'
10
+
11
+ module Bkmrq
12
+ # Cli
13
+ class Cli
14
+ def initialize(args)
15
+ @opts = {}
16
+ option_parser.parse!(sanitize_args(args), into: @opts)
17
+ end
18
+
19
+ private
20
+
21
+ def option_parser
22
+ @option_parser ||= OptionParser.new do |args|
23
+ # Option Parsing
24
+ Bkmrq::Manual.options_specs.map do |option_spec|
25
+ option_key = option_spec.pop
26
+ args.on(*option_spec) { |input| @opts.send(:[]=, option_key, input) }
27
+ end
28
+
29
+ # Manual Printing
30
+ args.banner = Bkmrq::Manual::BANNER
31
+ args.on_tail('-H', '--help', 'Bkmrq Manual') { puts args }
32
+ end
33
+ end
34
+
35
+ def sanitize_args(args)
36
+ args.reject(&:empty?).map(&:scrub).map(&:split).flatten
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bkmrq
4
+ # document output template
5
+ class DocsTemplate
6
+ FORMAT = {
7
+ title: "#{ENV['USER']}'s Web Browser Bookmarks",
8
+ subtitle: 'Bookmarks Exported Using Bkmrq',
9
+ header_image: 'https://user-images.githubusercontent.com/36154121/137836028-8dfe3001-4626-47a0-880f-d3dc7b719e27.jpeg',
10
+ description: <<-MD
11
+ This file was auto generated using the [bkmrq](https://github.com/sreedevk/bkmrq) gem.
12
+ MD
13
+ }.freeze
14
+
15
+ def self.title
16
+ "# #{FORMAT[:title]} \n"
17
+ end
18
+
19
+ def self.subtitle
20
+ "## #{FORMAT[:subtitle]} \n"
21
+ end
22
+
23
+ def self.header_image
24
+ "![](#{FORMAT[:header_image]}) \n"
25
+ end
26
+
27
+ def self.description
28
+ FORMAT[:description]
29
+ end
30
+ end
31
+ end
data/lib/manual.rb ADDED
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Bookmarks Manual
4
+ module Bkmrq
5
+ # Package Manual
6
+ class Manual
7
+ BANNER = <<-MAN
8
+ Bkmrq - Export your bookmarks to markdown
9
+
10
+ # Supported Browsers
11
+ - brave
12
+ - chromium
13
+ MAN
14
+
15
+ def self.options_specs
16
+ [
17
+ browser_opt_specs,
18
+ input_file_opt_specs,
19
+ output_file_opt_specs,
20
+ edit_opt_specs
21
+ ]
22
+ end
23
+
24
+ def self.browser_opt_specs
25
+ [
26
+ '-B BROWSER',
27
+ '--browser BROWSER',
28
+ String,
29
+ 'Browser (Loads Default Configs)', :browser
30
+ ]
31
+ end
32
+
33
+ def self.input_file_opt_specs
34
+ [
35
+ '-F FILE',
36
+ '--input-file FILE',
37
+ String,
38
+ 'Bookmarks file generated by your browser. (JSON FORMAT ONLY)',
39
+ :'input-file'
40
+ ]
41
+ end
42
+
43
+ def self.output_file_opt_specs
44
+ [
45
+ '-O FILE',
46
+ '--output-file FILE',
47
+ String,
48
+ 'Filepath for markdown generated by Bkmrq',
49
+ :'output-file'
50
+ ]
51
+ end
52
+
53
+ def self.edit_opt_specs
54
+ [
55
+ '-E',
56
+ '--edit',
57
+ 'Load Generated Markdown in $EDITOR (will not persist generated output)',
58
+ :edit
59
+ ]
60
+ end
61
+
62
+ private_class_method :browser_opt_specs, :input_file_opt_specs, :output_file_opt_specs, :edit_opt_specs
63
+ end
64
+ end
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bkmrq
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sreedev Kodichath
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-11-04 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Bkmrq Converts Bookmarks stored by your browser in JSON format to a readable
14
+ markdown format
15
+ email: sreedevpadmakumar@gmail.com
16
+ executables:
17
+ - bkmrq
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - bin/bkmrq
22
+ - lib/app.rb
23
+ - lib/bkmrq.rb
24
+ - lib/browser_config.rb
25
+ - lib/cli.rb
26
+ - lib/docs_template.rb
27
+ - lib/manual.rb
28
+ homepage: https://rubygems.org/gems/bkmrq
29
+ licenses:
30
+ - MIT
31
+ metadata:
32
+ source_code_uri: https://github.com/sreedevk/bkmrq
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ requirements: []
48
+ rubygems_version: 3.2.22
49
+ signing_key:
50
+ specification_version: 4
51
+ summary: Export your browser bookmarks to markdown!
52
+ test_files: []